package com.xipu.yygh.common.exception;

import com.xipu.yygh.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * description: GlobalExceptionHandler 统一异常处理类
 * 常见的异常处理方式有三种：
 * 1.全局异常处理
 * 2.特定异常处理(不常用，因为不能确定报什么异常)
 * 3.自定义异常处理
 * @ControllerAdvice注解基于AOP,可以理解为我们重写了原先的异常方法
 * @author: gql
 * @date: 2021/10
 */
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 全局异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e) {
        e.printStackTrace();
        return R.error().message("全局异常处理提醒:系统发生异常！！");
    }

    /**
     * 特定异常处理(优先执行)
     * @param e
     * @return
     */
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public R error(ArithmeticException e) {
        e.printStackTrace();
        return R.error().message("执行了特定异常");
    }


    /**
     * 自定义异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(YyghException.class)
    @ResponseBody
    public R error(YyghException e) {
        log.error("yygh自定义异常:" + e.getMsg());
        e.printStackTrace();
        return R.error().message(e.getMsg()).code(e.getCode());
    }
}
